from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'hello world'


# 第一次请求之前调用该视图函数，且只调用一次。多应用于初始化操作
@app.before_first_request
def before_first_request():
    print("before_first_request")


# 每次请求之前都会调用该视图函数，多应用与ip处理（如封ip）
@app.before_request
def before_request():
    print('before_request')
    # 如：这里可以添加ip处理功能


# 每次请求之后会调用该视图函数，多应用于拦截对响应对象进行统一处理
@app.after_request
def after_request(response):
    print('after_request')
    # 如：拦截处理（这里未讲）
    # response.headers["Content-Type"] = "application/json"
    # response.set_cookie
    return response


# 每次请求结束之后会调用该视图函数，且每次会传入error，若请求无措则error为空，多应用于异常处理
@app.teardown_request
def teardown_request(error):
    print(error)
    print('teardown_request')


if __name__ == '__main__':
    app.run()
